package helloworld.jface;

import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.StatusLineManager;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class JfaceExample extends ApplicationWindow{

	private ExitAction m_ExitAction; 
	public JfaceExample() {
		 super(null);
		 m_ExitAction = new ExitAction(this);
	}
	public JfaceExample(Shell parentShell) {
		//父类接受一个参数为Shell类的对象作为父窗口句柄，
		//如果这个窗口为顶级窗口的话,则传null
		 super(parentShell);
		 m_ExitAction = new ExitAction(this);
		// TODO Auto-generated constructor stub
	}
	//当它们时被程序调用时，它们依次调用createMenuManager()，createStatusLineManager()，以及createToolBarManager()。
	//如果你希望能有一个菜单栏，状态条，或者一个工具栏，那就需要重载这些方法，确保它们返回正确的类型。我们很快就会看到这些方法的实现。
	
	
	//createContents()方法在你创建自己的程序时需要重载，以便创建并放置你的窗口小部件。在这个示例中，你只需要设置程序窗体标题和状态条：
	protected Control createContents(Composite parent){ 
		getShell().setText("JFace Example"); 
		setStatus("JFace Example v1.0"); 
		return parent;
	}
	
	//我们要注意的一点是，程序窗口是在窗口中所有部件全部创建之后才创建的。接下来我们初始化窗口大小。
	protected void initializeBounds() {
		getShell().setSize(300,200);
	}
	
	//然后我们要做的工作是创建菜单，在SWT里面我们想创建菜单时很痛苦的事情，
	//我们要写大量的代码，这样导致开发效率低下，而在JFace中，我们只需要在createMenuManager方法里面写少量代码即可。
	protected MenuManager createMenuManager() {
		MenuManager menuBar = new MenuManager(""); 
		MenuManager fileMenu = new MenuManager("&File");
		MenuManager helpMenu = new MenuManager("&Help");
		menuBar.add(fileMenu); 
		menuBar.add(helpMenu);
	    //由于helpMenu没有子项，所以它不会显示出来
		fileMenu.add(m_ExitAction);
		return menuBar;
	}
	
	//StatusLineManager类提供了设置状态条文字的方法，可以用来控制显示在状态栏的一个进度条，也可以用来显示错误文字和图片：
	protected StatusLineManager createStatusLineManager() {
		
		StatusLineManager statusLineManager = new StatusLineManager();
		statusLineManager.setMessage("Hello, world!"); 
		return statusLineManager; 
	}
	
	
	//创建一个工具栏只需创建ToolBarManager的一个实例，传入一个样式(style)，然后加入任何动作(actions)：
	protected ToolBarManager createToolBarManager(int style) {
		ToolBarManager toolBarManager = new ToolBarManager(style);
		toolBarManager.add(m_ExitAction); 
		return toolBarManager; 
	}
	
	
	//接下来就是我们熟悉的主函数了~~
	public static void main(String[] args) {
		JfaceExample fe = new JfaceExample();
		fe.setBlockOnOpen(true); 
		fe.open();
		Display.getCurrent().dispose(); 
	}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
}
